#ifndef CAL_H
#define CAL_H

#include <iostream>
#include <cmath>
#include <iomanip>
#include <limits>

#define M_PI 3.14159265358979323846

// 程序介绍
// void printIntroduction() {
//     std::cout << "欢迎使用太阳位置计算程序！" << std::endl;
//     std::cout << "该程序可以计算指定日期和时间下太阳的位置，包括太阳高度角和方位角。" << std::endl;
//     std::cout << "您可以选择单次计算或批量计算。" << std::endl;
//     std::cout << "单次计算用于计算特定日期和时间的太阳位置。" << std::endl;
//     std::cout << "批量计算用于计算一段时间内的太阳位置，可以指定开始时间、结束时间和时间间隔。" << std::endl;
// }

// 计算太阳位置
void calculateSolarPosition(double longitude, double latitude, int year, int month, int day, int hour, int minute, int second,
                            double& alpha, double& gamma, double& Hs_sunrise, double& Hs_sunset, int& n) ;

// 批量计算并输出结果
void batchCalculation(double longitude, double latitude, int year, int month, int day, int start_hour, int start_minute, int end_hour, int end_minute, int interval_minute);

// int main() {
//     printIntroduction();

//     double longitude, latitude;
//     int year, month, day;
//     int start_hour, start_minute, end_hour, end_minute, interval_minute;
//     char repeat_mode = 'y';

//     while (repeat_mode == 'y' || repeat_mode == 'Y') {
//         int mode = 0;

//         while (mode != 1 && mode != 2) {
//             std::cout << "======================================" << std::endl;
//             std::cout << "模式选择（1为单次计算，2为批量计算）：";
//             std::cin >> mode;
//         }

//         if (mode == 1) {
//             std::cout << "请输入您的经度（格式为XX.XXX）：";
//             std::cin >> longitude;
//             std::cout << "请输入您的纬度（格式为XX.XXX）：";
//             std::cin >> latitude;

//             std::cout << "请输入日期（格式为YY MM DD）：";
//             std::cin >> year >> month >> day;

//             std::cout << "请输入时间（格式为HH MM）：";
//             std::cin >> start_hour >> start_minute;

//             std::cout << "======================================" << std::endl;
//             std::cout << "太阳高度角和方位角如下：" << std::endl;
//             std::cout << "======================================" << std::endl;

//             double alpha, gamma, Hs_sunrise, Hs_sunset;
//             int n;

//             calculateSolarPosition(longitude, latitude, year, month, day, start_hour, start_minute, 0, alpha, gamma, Hs_sunrise, Hs_sunset, n);

//             std::cout << "日期序数n：" << n << std::endl;
//             std::cout << "日出时间：" << std::setw(2) << std::setfill('0') << static_cast<int>(Hs_sunrise) << ":" << std::setw(2) << std::setfill('0') << static_cast<int>((Hs_sunrise - static_cast<int>(Hs_sunrise)) * 60) << std::endl;
//             std::cout << "日落时间：" << std::setw(2) << std::setfill('0') << static_cast<int>(Hs_sunset) << ":" << std::setw(2) << std::setfill('0') << static_cast<int>((Hs_sunset - static_cast<int>(Hs_sunset)) * 60) << std::endl;
//             std::cout << "太阳高度角：" << alpha << "°" << std::endl;
//             std::cout << "太阳方位角：" << gamma << "°" << std::endl;
//         }
//         else if (mode == 2) {
//             std::cout << "请输入您的经度（格式为XX.XXX）：";
//             std::cin >> longitude;
//             std::cout << "请输入您的纬度（格式为XX.XXX）：";
//             std::cin >> latitude;

//             std::cout << "请输入日期（格式为YY MM DD）：";
//             std::cin >> year >> month >> day;

//             std::cout << "请输入开始时间（格式为HH MM）：";
//             std::cin >> start_hour >> start_minute;
//             std::cout << "请输入结束时间（格式为HH MM）：";
//             std::cin >> end_hour >> end_minute;
//             std::cout << "请输入时间间隔（分钟）：";
//             std::cin >> interval_minute;

//             std::cout << "======================================" << std::endl;
//             std::cout << "日出、日落时间及太阳高度角和方位角如下：" << std::endl;
//             std::cout << "======================================" << std::endl;

//             batchCalculation(longitude, latitude, year, month, day, start_hour, start_minute, end_hour, end_minute, interval_minute);
//         }

//         std::cout << "是否继续当前模式计算？（y/n）：";
//         std::cin >> repeat_mode;

//         if (repeat_mode == 'n' || repeat_mode == 'N') {
//             // 如果用户选择退出计算，则重置模式为0，以便重新选择模式
//             mode = 0;
//         }
//     }

//     return 0;
// }


#endif // CAL_H
